import math
from matplotlib import pyplot as plot #用来绘制图形
import numpy as np  #用来处理数据

from mpl_toolkits.mplot3d import Axes3D  #用来给出三维坐标系。


def F3(arr,arr1): #Schaffer函数(-10,10) (-1.42513,-0.80032) (-186.7309)

    a = np.ones((len(arr), len(arr)))
    print(arr)
    for ms in range(len(arr)):
        m = []

        for n in range(len(arr[ms])):

            sum = 0
            sum1 = 0
            for i in range(1,6):
                sum = sum + i*math.cos( (i+1) * arr[ms][n] +i)
                sum1 = sum1 + i * math.cos((i + 1) * arr1[ms][n] + i)
            s=sum*sum1
            a[ms][n]=s

    return a

figure = plot.figure()

#画出三维坐标系：

axes = Axes3D(figure)


X = np.arange(-10, 10, 0.1)
Y = np.arange(-10, 10, 0.1)

#限定图形的样式是网格线的样式：

X, Y = np.meshgrid(X, Y)
Z = F3(X,Y)

#绘制曲面，采用彩虹色着色：

axes.plot_surface(X, Y, Z,cmap='rainbow')


#图形可视化：

plot.show()